iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

從零開始的後端異世界生活系列 第 6

Day 06 - 簡易 NestJS 專案導覽(下) 與你的第一支 API

  • 分享至 

  • xImage
  •  

src 內的基本架構

今天要來簡單講解一下 src 內的基本架構:
https://ithelp.ithome.com.tw/upload/images/20200921/20119619nBMxmloXF8.png

  • 先從 main.ts 開始。
    https://ithelp.ithome.com.tw/upload/images/20200921/20119619Vo0I21gEEC.png

https://ithelp.ithome.com.tw/upload/images/20200921/20119619dqyMfM50zd.png

main.ts 主要是我們的進入點,也可以稱作入口處、入口文件或路由指向,其透過 NestFactory 創建了 AppModule 來形成我們的應用,在此我們可以決定要啟動哪一個 Module 跟要使用哪一個連接埠(目前預設是 3000),之後我們會在 main.ts 撰寫 swagger 相關程式碼來產生 API 文件。

  • app.module.ts
    https://ithelp.ithome.com.tw/upload/images/20200921/20119619gPgiwErjGl.png

https://ithelp.ithome.com.tw/upload/images/20200921/20119619UyuuS3ezaR.png

AppModule 是我們的根模組(又稱作 Root Module),在左上方可以看到它是一個被 @Module() 裝飾器所裝飾的 Class,每個 NestJS 專案至少要有一個模組(Root),而根據不同功能,可以將各功能拆分到各個 Module 中再引入 RootModule,有點像下面這張圖:
https://ithelp.ithome.com.tw/upload/images/20200921/20119619EEsFJDECwf.png
(來自 Nestjs開發RESTful API & MicroServices(一) 前言介紹

每個 Module 各自負責要處理的 Feature,而一個 Module 可以包含四種對象:providers, controllers, imports, exports(後面篇章繼續講解)。

  • app.controller.ts
    https://ithelp.ithome.com.tw/upload/images/20200921/20119619aB6tOIqi2T.png

https://ithelp.ithome.com.tw/upload/images/20200921/20119619Yy7QxR681i.png

Controller 是面向客戶端,負責響應客戶端的請求,且管理路由並返回數據的 Class,在左上方可以看到 @Controller() 的裝飾器,而此 Class 就成為了 Controller(關於裝飾器之後篇章會繼續講解)。

而此 Controller 在建構時使用依賴注入將 AppService 給注入,並撰寫了一個帶入 Get() 裝飾器的 getHello() 方法,並返回 appService.getHello()。

  • app.service.ts
    https://ithelp.ithome.com.tw/upload/images/20200921/201196197OQ9lUJSyr.png

https://ithelp.ithome.com.tw/upload/images/20200921/20119619bAKrevoeCe.png

AppService 就如同它的名字,它負責處理有關商業邏輯的部分,亦會跟我們的 DB 來打交道,再處理完數據之後,再給我們的 Controller 來調用。

在 Class 的左上角可以看到 @Injectable(),故 Service 會被注入到各個地方去被調用。

你的第一支 API - Hello World!

在前幾篇章時,我們將 Localhost 的 Server 給啟動後,並輸入 http://localhost:3000 ,可以看到以下畫面:
https://ithelp.ithome.com.tw/upload/images/20200921/20119619xNDEnS2NtZ.png

拿去 PostMan 打也可以得到一樣的結果:
https://ithelp.ithome.com.tw/upload/images/20200921/20119619NvhVOHIRxT.png

這是為啥呢,我怎麼什麼都還沒寫就有第一支 API 了,是的,在創建專案時就已經送給你,你的第一支 API - Hello World!

當我們運營在本地端時,目前的接口是 http://localhost:3000 ,而我們在 Controller 中撰寫的 getHello() 方法,返回了 AppService 的 「Hello World!」字串,並且由於 Get() 與 Controller() 裝飾器並沒有設置其他路由,故我們直接呼叫 http://localhost:3000 時,等同於呼叫到了 Controller 裡的 getHello(),在前面提到,Controller 是負責面向客戶端,並返回數據的,這就是 Hello World! 的由來。

下一篇章,再繼續來講 Controller。

/*
本系列文係個人新手開發心得,可能會有許多錯誤,煩請多多包容不吝指教。
*/


上一篇
Day 05 - 簡易 NestJS 專案導覽(上) 與引入 Dependencies
下一篇
Day 07 - NestJS 中的 Controller 基礎篇
系列文
從零開始的後端異世界生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言